闲扯
数列练习好题。
题面
Solution
直接暴力矩阵乘法肯定不行,复杂度爆了。
考虑简化,可以发现这个式子很有规律。
由高一的数列知识,我们做出如下操作:
我们设 $b_{i}=a_i-3\cdot a_{i-1}$ ,其中 $b_1=3,b_2=6$ 。
那么我们有:
我们分奇偶讨论:
当 $n$ 为奇数时,由累加法,我们有 $b_n-b_1=3^n+3^{n-2}+\cdots +3^3$ 。
等比数列求和,我们可以得到:
所以 $a_n-3\cdot a_{n-1}=\frac{3^{n+2}-3}{8}$ 。
类似的,我们可以算出当 $n$ 为偶数时, $a_n-3\cdot a_{n-1}=\frac{3^{n+2}-33}{8}$ 。
继续按照套路,我们设 $c_i=\frac{a_i}{3^i}$ ,则:
同样分奇偶讨论。
当 $n$ 为奇数时,我们有:
两式相加,可以得到 $c_n-c_{n-2}=\frac{9}{4}-\frac{17}{4\cdot 3^{n-1}}$ 。
继续使用累加法,我们有:
因为 $c_1=-2$ ,所以 $c_n=\frac{17}{32}\cdot 3^{1-n}+\frac{9}{8}n-\frac{117}{32}$ 。
所以当 $n$ 为奇数时, $a_n=\frac{51}{32}+\frac{n}{8}\cdot 3^{n+2}-\frac{117}{32}\cdot 3^n$ 。
类似的,我们可以推出当 $n$ 为偶数的时候, $a_n=\frac{21}{32}+\frac{n}{8}\cdot 3^{n+2}-\frac{117}{32}\cdot 3^n$ 。
可以发现只有常数项有细微的差别,我们合并一下,即可得到:
发现我们每次需要算一个 $3^n$ ,时间复杂度 $O(T\log n)$ ,依旧很爆炸。
根据费马小定理,我们有 $3^n\equiv 3^{n\ mod\ P-1}(mod\ P)$ ,可以优化到 $O(T\log P)$ 。然而并没有啥卵用
但是 $P=10^9+7,\sqrt{P}=31623$ , 所以考虑光速幂。
我们预处理出 $3^{32000i}$ 和 $3^i$ ,就可以将 $3^n$ 拆分为 $3^{\lfloor\frac{n}{32000}\rfloor}\cdot 3^{n\ mod\ 32000}$ 。
这样就能 $O(1)$ 计算了。
Code
1 |
|